package com.ww.springboot.boot.algorithm.list.ergodic;

/**
 * 描述：数组遍历
 * 给定一个二进制数组， 计算其中最大连续 1 的个数
 *
 * /*
 *         1. 定义dp数组以及下标的含义
 *         int[] dp = new int[nums.length+1];
 *         dp[i]:表示以i结尾的最大连续1的个数为dp[i]
 *
 *         2. 推导出递推公式
 *         遍历一个元素，你就判断是不是等于1，如果等于1。就累加它的动态值。即 dp[i-1]+1;
 *         如果不是1，那说明是0. 就 终止了本次的最大连续1个数。即dp[i]=0;
 *
 *         即：if(nums[i]==1){
 *                 dp[i]=dp[i-1]+1;
 *             }
 *
 *         3. 初始化dp数组
 *         由递推公式即 dp[0]=0;
 *
 *         4. 确定遍历
 *             正常遍历顺序
 *
 *
 * @author 🧑 ‍wanwei
 * @since 2021-12-25 15:02
 */
public class FindMaxConsecutiveOnes {

    public static void main(String[] args) {
        int[] nums = {0, 1, 1, 1, 0, 0};
        System.out.println(method(nums));
    }

    private static Integer method(int[] nums) {
        int max = 0;
        int num = nums.length;
        for (int i = 0; i < num; i++) {
            //如果与当前数字相同 则数量加1
            int j = i;
            while (j < num && nums[j] == 1) j++;
            max = j - i > max ? j - i : max;
            i = j;
        }
        return max;
    }
    private static Integer method2(int[] nums) {
        int[] dp = new int[nums.length+1];

        int res = 0;
        for(int i=1;i<dp.length;i++){
            if(nums[i-1]==1){
                dp[i]=dp[i-1]+1;
                res = dp[i]>res? dp[i]:res;
            }
        }

        return res;
    }
}
